<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /**
         * 1.类中的构造器不是必须写的，要对实例进行一些初始化的操作，如添加指定属性时才写
         * 2.类中的构造器方法必须使用super调用父类构造器；就是A类继承了B类，且A类中写了构造器，那么A类构造器中的super必须调用
         * 3.类中所定义的方法，都是放在类的原型对象上，供实例使用
         */
        // 创建一个Person类
        class Person {
            // 构造器方法
            constructor (name, age) {
                // 构造器中的this指向实例对象
                this.name = name
                this.age = age
            }
            // 一般方法
            speak() {
                // speak方法在类的原型对象上
                console.log(`我叫${this.name}，我的年龄是${this.age}`)
            }
        }
        const p1 = new Person('tom', 8)
        const p2 = new Person('jerry', 9)
        p1.speak()
        p2.speak()
        // 创建一个student类,继承Person类
        class Student extends Person {
            constructor (name, age, grade) {
                super(name, age) // 调用父类构造器,必须最开始调用
                this.grade = grade
            }
            speak() {
                // speak方法在类的原型对象上
                console.log(`我叫${this.name}，我的年龄是${this.age}，我读的是${this.grade}年级`)
            }
            study() {
                console.log(`我叫${this.name}，我正在学习`)
            }   
        }
        const s1 = new Student('lucy', 10, '高一')
        console.log(s1)
        s1.speak()
        s1.study()
    </script>
</body>
</html>